package co.com.smart.persistence.entity;

import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import co.com.smart.persistence.entity.dto.SmartSede;
import co.com.smart.persistence.entity.util.AbstractFacade;

/**
 * Session Bean implementation class PaisFacade
 */
@Stateless(
		name		= "SedeFacade", 
		mappedName 	= "ejb/SedeFacade")
public class SedeFacade extends AbstractFacade<SmartSede> implements SedeFacadeLocal{
	
	@PersistenceContext(unitName = "SmartServicesPU")
		private EntityManager em;
	    /**
	     * Default constructor. 
	     */
	    public SedeFacade() {
	    	super(SmartSede.class);
	    }

		@Override
		protected EntityManager getEntityManager() {
			return em;
		}

		@SuppressWarnings("unchecked")
		@Override
		public List<SmartSede> consultarAllSede(SmartSede filtro) {
	    	StringBuilder  sQuery = new StringBuilder("select s from SmartSede s  ");
			sQuery.append(" where s.smFhretiro is null ");
			
			if (filtro.getSmScciudad() != null && filtro.getSmScciudad().getSmscciudad() != null) {
				sQuery.append(" and s.smScciudad = :sm_scciudad ");			
			}			

			if(filtro.getSmartSedeTipoZona() != null && filtro.getSmartSedeTipoZona().getSmscdatmestro() != null){
				sQuery.append(" and s.smartSedeTipoZona = :sm_sctipozona ");
			}
			
			if(filtro.getSmartSedeTipoUbicacion() != null && filtro.getSmartSedeTipoUbicacion().getSmscdatmestro() != null){
				sQuery.append(" and s.smartSedeTipoUbicacion = :sm_sctipoubicacion ");
			}
			
			if(filtro.getSmartInstitucion() != null && filtro.getSmartInstitucion().getSmscinstitucion() != null) {
				sQuery.append(" and s.smartInstitucion = :sm_scinstitucion ");
			}
			
			Query query = em.createQuery(sQuery.toString() );
			
			if (filtro.getSmScciudad() != null && filtro.getSmScciudad().getSmscciudad() != null) {
				query.setParameter("sm_scciudad", filtro.getSmScciudad());	
			}
			
			if(filtro.getSmartSedeTipoZona() != null && filtro.getSmartSedeTipoZona().getSmscdatmestro() != null) {
				query.setParameter("sm_sctipozona", filtro.getSmartSedeTipoZona());
			}
			
			if(filtro.getSmartSedeTipoUbicacion() != null && filtro.getSmartSedeTipoUbicacion().getSmscdatmestro() != null) {
				query.setParameter("sm_sctipoubicacion", filtro.getSmartSedeTipoUbicacion());
			}
			
			if(filtro.getSmartInstitucion() != null && filtro.getSmartInstitucion().getSmscinstitucion() != null) {
				query.setParameter("sm_scinstitucion", filtro.getSmartInstitucion());
			}
			
			return query.getResultList();
		}
	}
